home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
041-050
/
amok42
/
menu
/
menu.dok
< prev
next >
Wrap
Text File
|
1993-11-04
|
8KB
|
149 lines
Dokumentation zu Menu V1.0
==========================
1.Warum Menu ?
--------------
Unter Intuition gibt es keine Möglichkeit, Menus mit Maus und Tastatur
vernünftig zu bedienen. Dies ist mit Menu anders. Dabei wird ein Menu auf
dem Bildschirm dargestellt, das sich mit der Maus und der Tastatur bedienen
läßt.
2.Bedienung:
------------
Das Modul Menu stellt zwei verschiedene Arten von Menus zur Verfügung. Das
erste ist ein SelectMenu, bei dem aus einer Anzahl von Items eins ausgewählt
werden kann. Das zweite ist ein CheckMenu, bei dem je nach Status des Items
ein Check-Mark gesetzt wird oder entfernt wird. Mit dem letztem Item des Menus
wird das CheckMenu beendet.
3.Das Beispielprogramm MenuDemo:
--------------------------------
Es war schon immer so, ein Beispiel sagt mehr als tausend Worte, also sollte
man sich MenuDemo ansehen. MenuDemo sucht mit der Funktion AvailFonts() nach
Fonts und stellt die gefundenen in einen SelectMenu dar. Nun sollte man sich
einen Font aussuchen. Als nächstes wird ein CheckMenu dargestellt, mit dem die
DrawModes eingestellt werden können. Wird ein Item angeklickt, so wird da-
hinter ein Check-Mark gesetzt, bzw. gelöscht. Das letzte Item beendet die Aus-
wahl. Nun wird der gesammte Bildschirm mit dem ausgesuchten Font und den
gewählten DrawModes beschrieben. Beendet wird das Programm mit der linken
Maustaste.
Die Menus lassen sich, wie schon erwähnt, mit Maus und Tastatur steuern.
Bei der Steuerung mit der Maus, kann ein Item mit dem Mauszeiger aktiviert
werden, mit dem linken Mausknopf wird es dann angewählt.
Bei der Tastatursteuerung werden hauptsächlich die Cursortasten verwendet.
Bei CursorUp wird das nächst höhere Item aktiv, bei CursoDown das nächst
niedrigere. Drückt man die Space Taste, so wird ebenfalls das nächst höhere
Item aktiviert. Ausgewählt wird ein Item mit allen übrigen Tasten.
3.Programmierung:
-----------------
Um ein Menu darstellen zu können, muß erstmal eine Struktur ausgefüllt werden,
die Menu-Struktur:
Menu = RECORD
leftEdge,topEdge : INTEGER;
width,height : INTEGER;
type : MenuType;
flags : MenuFlagSet;
numItems : CARDINAL;
selectedItems : LONGSET;
checkMark : ImagePtr;
standWidth : CARDINAL;
hailText : IntuiTextPtr;
firstText : IntuiTextPtr;
END;
leftEdge,topEdge : Koordinaten des linken oberen Punktes des Menus im Fenster.
width,height : Höhe und Breite des Menus.
Nur das Rechteck, das durch diese Koordinaten bestimmt ist,
Wird am Ende wieder gelöscht !
type : Zeigt an, um welche Menuart es sich handelt, entweder
selectMenu oder checkMenu
flags : Folgende MenuFlags sind zulässig:
menuBorder : Es wird ein Rahmen um das gesamte Menu gezogen
standardWidth : Die Länge des Rahmens, bzw. des invertierten Bereichs ist
für alle Items gleich. Diese Länge muß in standWidth
angegeben werden !
invertItems : Das aktuelle Item wird invers dargestellt
boderItems : Um das aktuelle Item wird ein Rahmen gezogen
cycleItems : Die Farbe des aktuellen Items rotiert im VertB-Interrupt
changeColorItems : Das aktuelle Item wird in einer anderen Farbe dargestellt
customCheckMark : Es wird ein eigenens Check-Mark verwendet,dessen ImagePtr
in checkMark eingetragen werden muß, natürlich nur bei
checkMenu sinnvoll !
clearFirst : Der Bereich des Windows, in dem das Menu aufgebaut werden
soll, wird vorher gelöscht
saveBack : Der Bereich des Windows, in dem das Menu aufgebaut wird,
wird gerettet und nach entfernen des Menus wieder dort
eingesetzt
numItems : Anzahl der Items, beim CheckMenu wird auch das letzte Item,
das für die Beendigung des Menus dar ist, mitgezählt !
selectedItems : Beim CheckMenu wird hier für jedes Item ein Flag gesetzt
oder nicht, je nachdem ob ein Item abgehakt wurde oder
nicht. Hiermit lassen sich auch Voreinstellungen dem Menu
übergeben. Übergibt man LONGSET{0,3,4} so sind die Items
0,3,4 schon beim Darstellen des Menus aktiv.
hailText : Zeiger auf einen IntuiText, der die Überschrift darstellt,
dabei sind die Koordinaten des Textes relativ zu denen im
Menu.
firstText : Zeiger auf das erste Item des Menus, das durch einen Intui-
Text definiert ist, die einzelnene Items werden durch den
IntuiText.nextText Zeiger miteinander verkettet. Das letzte
Item beim nextText muß ein NIL besitzen !
Die Koordinaten des Menus sind wie schon beim hailText re-
lativ zum Menu. Zu beachten ist noch, das bei der Akti-
vierung eines Items, z.B. wenn es invertiert wird,
der Bereich des Textes Plus einen Rand auf allen Seiten von
2 Pixeln mit invertiert wird. Damit am Ende das gesamte
Menu gelöscht wird, muß diese berücksichtigt werden! Ein
Item sollte also bei einer leftEdge und topEdge von
mindestens 3 liegen.
Diese Struktur wird nun folgender Procedure übergeben:
PROCEDURE DrawMenu(WPtr:WindowPtr;MPtr:MenuPtr):CARDINAL
WPtr:Zeiger auf das Window, in dem das Menu dargestellt werden soll.
Dabei ist noch zu beachten, das bei dem Window folgende IDCMPFlags
gesetzt sein müssen: mouseButtons,rawKey,mouseMove. Bei den Window-
Flags muß reportMouse gesetzt sein, damit DrawMenu korrekt funktio-
niert.
MPtr:Adresse der ausgefüllten Menu-Struktur
DrawMenu gibt die Nummer des ausgewählten Items zurück, die natürlich nur
beim selectMenu sinnvoll ist, da sie beim CheckMenu immer die Nummer des
letzen Items ist.
Nach Beendigung hat man also folgende Ergebnisse:
Beim selectMenu wird die Nummer des angewählten Items zurückgegeben.
Beim checkMenu kann man an dem Menu-Eintrag selectedItems ablesen, welches
Item angewählt wurde, und welches nicht.
Beim select, wie beim checkMenu gilt, daß das erste Item die Nummer 0 be-
sitzt, das zweite die Nummer 1, und so weiter.
4.Copyright:
------------
Es darf grundsätzlich nur das gesammte Paket weitergegeben werden, dazu ge-
höhren: Menu.def, Menu.mod, MenuDemo.mod, MenuDemo und Menu.dok. An diesen
Files dürfen keine Veränderungen vorgenommen werden!
Jeder darf das Modul Menu in seinen Programmen frei verwenden, es sei denn, es
wird in irgendeiner Weise Geld damit verdient. In diesem Fall ist eine Ab-
sprache mit mir erforderlich.
Ich behalte mir rechtliche Maßnahmen gegen jeden vor, der gegen diese Bedin-
gungen verstößt !
5.Sonstiges:
------------
Wer irgendwelche Fragen,Vorschläge, Verbesserungen oder sonst irgend etwas auf
dem Herzen hat sollte sich an folgene Addresse wenden:
Jan Behrens
Hauptstraße 13
2211 Holstenniendorf
viel Spaß mit den Menus !!!